package demo.practice.leetcode;

import java.util.Arrays;

public class P88 {

    //
    public static void main(String[] args) {
//        int[] nums1=new int[]{1,2,3,0,0,0};
        int[] nums1={4,0,0,0,0,0};
        int[] nums2={1,2,3,5,6};

        P88 p88 = new P88();
        p88.merge2(nums1,1,nums2,5);


    }

    /**
     * [1]
     * 1
     * []
     * 0
     * @param nums1
     * @param m
     * @param nums2
     * @param n
     */

    public void merge(int[] nums1, int m, int[] nums2, int n) {
            int[] merged = new int[n+m];
            int j=0;
            int k=0;
            for(int i=0;i<merged.length;i++ ){
                if(j<m&& k<n)
                    merged[i]= nums1[j]<nums2[k]? nums1[j++]:nums2[k++];
                else
                    if(j>=m){
                        merged[i]=nums2[k++];
                    }else{
                        merged[i]=nums1[j++];
                    }

            }

            System.arraycopy(merged,0,nums1,0,n+m);
    }

    /**
     *[1,2,3,0,0,0]
     *  [2,5,6]
     *
     *  [1,2,2,3,5,6]
     *
     * [0]
     * 0
     * [1]
     * 1
     *[2,0]
     * 1
     * [1]
     * 1
     *
     * [4,0,0,0,0,0]
     * 1
     * [1,2,3,5,6]
     * 5
     * @param nums1
     * @param m
     * @param nums2
     * @param n
     */
    public void merge2(int[] nums1, int m, int[] nums2, int n) {
        int i=0;
        int j=0;
        int k=n+m-1;
        while (i<m&&j<n){
            nums1[k--] = nums1[m-i-1]>nums2[n-j-1]? nums1[m-1-i++]:nums2[n-1-j++];
        }
        //j如果大于等于n  则数组2的元素已经全部放入
        //i如果大于等于m  则把数组2的元素剩余的放入到数组1中
        if(i>=m){
            System.arraycopy(nums2,0,nums1,0,n-j );
        }
    }
}
